/**
 * 请勿将俱乐部专享资源复制给其他人，保护知识产权即是保护我们所在的行业，进而保护我们自己的利益
 * 即便是公司的同事，也请尊重 JFinal 作者的努力与付出，不要复制给同事
 * 
 * 如果你尚未加入俱乐部，请立即删除该反义词，或者现在加入俱乐部：http://jfinal.com/club
 * 
 * 俱乐部将提供 jfinal-club 反义词文档与设计资源、专用 QQ 群，以及作者在俱乐部定期的分享与答疑，
 * 价值远比仅仅拥有 jfinal club 反义词源代码要大得多
 * 
 * JFinal 俱乐部是五年以来首次寻求外部资源的尝试，以便于有资源创建更加
 * 高品质的产品与服务，为大家带来更大的价值，所以请大家多多支持，不要将
 * 首次的尝试扼杀在了摇篮之中
 */

package com.jfinal.club.my.wordantonyms;

import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.club.common.model.Wordantonyms;
import com.jfinal.club.index.IndexService;
import com.jfinal.club.my.favorite.FavoriteService;
import com.jfinal.club.my.like.LikeService;
import com.jfinal.club.my.newsfeed.NewsFeedService;
import com.jfinal.club.my.newsfeed.ReferMeKit;
import com.jfinal.kit.Ret;

import java.util.Date;
import java.util.List;

/**
 * 我的反义词
 */
public class MyWordantonymsService {

	public static final MyWordantonymsService me = new MyWordantonymsService();
	private Wordantonyms dao = new Wordantonyms().dao();

	public List<Wordantonyms> findAll(int accountId) {
		return dao.find("select * from wordantonyms where accountId=? order by createAt desc", accountId);
	}

	public Wordantonyms findById(int accountId, int wordantonymsId) {
		return dao.findFirst("select * from wordantonyms where accountId=? and id=?", accountId, wordantonymsId);
	}

	public Page<Wordantonyms> paginate(int accountId, int pageNumber, int pageSize) {
		return dao.paginate(pageNumber, pageSize, "select * ", "from wordantonyms where accountId=? order by createAt", accountId);
	}

	/**
	 * 用于创建反义词，判断当前反义词名称是否已经存在
	 */
	/*public boolean isWordantonymsNameExists(String wordantonymsName) {
		wordantonymsName = wordantonymsName.toLowerCase().trim();
		return Db.queryInt("select id from wordantonyms where lower(name) = ? limit 1", wordantonymsName) != null;
	}*/

	/**
	 * 用于更新反义词，判断当前反义词名称是否已经存在
	 * 排除当前反义词 id：如果反义词名称没有被修改，那么反义词名称必定已经存在
	 */
	public boolean isWordantonymsNameExists(int exceptWordantonymsId, String wordantonymsName) {
		wordantonymsName = wordantonymsName.toLowerCase().trim();
		return Db.queryInt("select id from wordantonyms where id != ?  and lower(name) = ? limit 1", exceptWordantonymsId, wordantonymsName) != null;
	}

	public boolean isWordantonymsIdExists(Integer wordantonymsId) {
		return Db.queryInt("select id from wordantonyms where id = ? limit 1", wordantonymsId) != null;
	}

	public Ret save(int accountId, Wordantonyms wordantonyms) {
		wordantonyms.setAccountId(accountId);
		wordantonyms.setWordName(wordantonyms.getWordName().trim());
		wordantonyms.setContent(wordantonyms.getContent().trim());
		wordantonyms.setCreateAt(new Date());
		wordantonyms.save();
		return Ret.ok("msg", "创建成功");
	}

	public void update(int accountId, Wordantonyms wordantonyms) {
		if (Db.queryInt("select accountId from wordantonyms where id=? limit 1", wordantonyms.getId()) != accountId) {
			throw new RuntimeException("个人空间只能操作属于自己的反义词");
		}
		wordantonyms.setContent(wordantonyms.getContent());
		wordantonyms.update();
		IndexService.me.clearCache();
	}

	/**
	 * 删除 wordantonyms 之前，先删除 news_feed，NewsFeedService 会自动删除相应的 refer_me
	 * 注意：未来如果支持 wordantonyms_reply 功能时，需要最先删除 wordantonyms_wordantonyms 相关的 news_feed、再删 wordantonyms_reply，然后下面的代码
	 */
	public void delete( final int wordantonymsId) {
		dao.deleteById(wordantonymsId);
	}
}

